第 三 章  
了 解 和 熟 悉 H A L C O N  
汇报人:陈西PPT工作室  
目录  
走进HALCON  
HDevelop组件介绍  
像采集  
据结构  
走 进 H A L C O N  
什么是HALCON?  
HALCON是广泛使用的机器视觉软件,用户可以利用其开放  
式结构快速开发图像处理和机器视觉软件。HALCON包含了各  
类滤波,色彩以及几何,数学转换,形态学计算分析,校正,分  
类辨识,形状搜寻等等基本的几何以及影像计算功能。  
走进HALCON  
HALCON主要有以下三个优点:  
(1)HALCON包含了一套交互式的程序设计界面HDevelop,让使用者能在最短的时间里开发出  
视觉系统。  
(2)HALCON不限制取像设备,可以自行挑选合适的设备。  
(3)使用HALCON,在设计人机接口时没有特别的限制,也不必特别的可视化组件,可以完全  
使用开发环境下的程序语言,例如visual studio、NET、Mono等等。  
HDevelop图形组件  
HDevelop预览  
HALCON  
安装完成后,双击它的执行程序  
HDevelop.exe,便进入开发环境界面,整个界面  
分为标题栏、菜单栏、工具栏、状态栏和四个活  
动界面窗,一般情况下有四个活动界面窗口分  
别是图形窗口、算子窗口、变量窗口和程序窗口,  
如左图所示。  
注意:如果窗口排列不整齐,则可以点击菜单栏  
中的窗口”→“排列窗口”,重新排列窗口。  
HALCON主界面  
形窗口  
图形窗主要显示图像,可以显示处理前  
的原始图像,也可以显示处理后的region等,  
如左图所示。  
图形窗口  
子窗口  
算子窗口显示的是算子的重要数据,包含了  
所有的参数、各个变量的型态以及参数数值,如  
左图所示。  
这里会显示参数的默认值以及可以选用的数  
值。在图形窗口中,只要键入部分字符串甚至开  
头的字母,即可显示所有符合名称的算子供选用。  
算子窗口  
量窗口  
变量窗口显示了程序在执行时产生的各种  
变量,包括图像变量和控制变量,在变量上  
用鼠标双击,即可显示变量值,如左图所示。  
变量窗口  
序窗口  
程序窗口用来显示一个HDevelop程序。  
它可以显示整个程序或是某个运算符。窗口  
左侧是一些控制程序执行的指示符号。  
HDevelop刚启动时,可以看到一个绿色箭  
头的程序计数器(Program Counter, PC)、  
一个插入符号,还可以设置一个断点  
breaking point), 窗口右侧显示程序代码,  
如左图所示。  
程序窗口  
软 件 图 像 采 集  
软件图像采集  
熟悉了HALCON界面之后,接下来就要考虑怎么样进行采集图像。图  
像采集是图像处理的基础,采集图像的速度和质量会直接影响后续图像处  
理的效率。现在我们来介绍如何获取输入图像。  
获取非实时图像  
1
、读取单张图像,利用read_image算子进行读取程序如下:  
read_image (Image, 'D:/patras.png')  
取整个文件夹的图  
像,则可以利用for循  
来实现。  
获取非实时图像  
2
利用快捷键  
按住CTRL+R打开读取图像对话窗口,在文件名称一栏中选择图像所在的  
文件路径,在语句插入位置点击确定,即可获得图像,如下图所示。  
使用快捷键获取图像  
获取非实时图像  
3
、利用采集助手批量读取文件夹下所有图像  
点击菜单栏中的助手”→“打开新的Image Acquisition”,点击资源选项卡  
下的选择路径,如图1所示。点击代码生成选项卡下的插入代码,如图2  
示。  
图1 文件选择路径图  
图2 插入代码  
获取实时图像  
实时图像的HALCON实时图像采集可分为以下三步,如下图所示:  
HALCON实时采集图像流程图  
HALCON中,获取实时图像主要有两种方式:  
通过HALCON自带的采集接口获取;  
通过相机配套的SDK获取。  
数 据 结 构  
数据结构  
在研究机器视觉算法之前,我们必须分析机器视觉应用中涉及到的基  
本数据结构。因此,本节中我们先介绍一下图像,区域、亚像素轮廓、句  
柄以及数组数据结构。  
HALCON中查看图像变量  
HALCON中,把鼠标移动到HALCON变量窗口中的图像变量上会显示图  
像变量的类型、通道及尺寸,如下图所示。  
图像通道实例  
*
读取图像  
read_image (Image, 'D:/picture/ship.png')  
计算图像通道  
count_channels (Image, Num)  
循环读取每个通道的图像  
for Index := 1 to Num by 1  
获取多通道指定图像  
*合并通道  
compose2 (RedImage, GreenImage,  
MultiChannelImage)  
*
*向图像附加通道  
*
append_channel (MultiChannelImage,  
BlueImage, ImageExtended)  
程序执行结果如下图所示。  
*
access_channel (Image, channel1, Num)  
endfor  
*分解通道  
decompose3 (Image, RedImage, GreenImage,  
BlueImage)  
Region  
Region指图像中的一块区域,在HALCON中可以通过点击工具栏中的特征检测,  
如图1示。在弹出的对话框中选择region,可以看到region的不同特征属性及相对应的数  
值,如图2所示。  
图1  
图2  
Region  
HALCON中,将Image图像转换Region区域有以下两种方法:  
1)可以利用阈值分割threshold算子进行转化。  
threshold(Image:Region:MinGray, MaxGray:)  
2)使用灰度直方图进行转化,步骤如下:  
在工具栏中点打开灰度直方,如下图所示。接着打开使能输出按钮,最后拖动图3.18中的红色竖  
线与绿色竖线,点击插入代码即可。  
b)灰度直方图界面  
a)灰度直方图图标  
阈值分割算子获得区域实例  
*
值分割图像获得区域  
程序如下:  
threshold (Aegypt1, Regions, 23, 160)  
dev_display ( Regions)  
*
关闭窗口  
dev_close_window ()  
获得图像  
read_image (Aegypt1, 'egypt1')  
获得图像尺寸  
序执行结果如下图所示:  
*
*
get_image_size (Aegypt1, Width,  
Height)  
*
打开窗口  
dev_open_window (0, 0, Width, Height,  
black', WindowHandle)  
dev_display (Aegypt1)  
a)原图  
(b)阈值分割图  
'
XLD  
XLD,亚像素精度轮廓,指图像中某一块区域的轮廓,在HALCON中查看XLD的特  
征步骤与查看Region特征的步骤相似。点击工具栏中的特征检测”→“选择XLD”, 在图形  
窗口选择要查看的XLD特征,可看到XLD的特征属性及其相对应的数值,如下图所示。  
XLD特征检测  
图像转XLD实例  
*
关闭窗口  
dev_close_window ()  
获取图像  
read_image (Image, 'fabrik')  
打开适应图像大小的窗口  
程序执行结果如下图所示:  
*
*
dev_open_window_fit_image (Image, 0, 0, -1, -1,  
WindowHandle)  
*
提取图像得到亚像素边缘  
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)  
显示边缘  
dev_display (Edges)  
a)图像  
bXLD  
*
HandleTuple  
Handle句柄  
标识符,是拿来标识对象或者项目的。从数据类型上来看,它只是一个32  
位(或64 位)的无符号整数。  
Tuple  
可以理解为C语言中的数组,数组是编程语言中最常见的一种数据结构,可  
用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引  
来访问数组元素,包括为数组元素赋值和取出数组元素的值。C语言中数组的  
操作大都可以Tuple中找到对应的操作。  
本章小结  
本章简要介绍HALCON的功能特点及其交互式的编程环境HDevelop  
的开发环境。并概述了利用HALCON进行实时采集和离线采集的图像采集  
过程。此外,介绍了图像处理过程中的五种常用数据结构,分别是图形  
ImageRegionXLDHandleTupleHALCON数据结构HALCON  
学习的基础,本章节对后续HALCON编程的学习具有重要意义。  
习ꢀ题  
3
3
3
3
.1 熟悉HALCON的编程环境,并概述HALCON在图像处理应用上的特点。  
.2 使用HALCON采集助手读取某一文件夹下的图像。  
.3 将一张RGB图像转化为灰度图像。  
.4 求Val_mean的值。  
Tuple:=[1,2,10]  
Tuple[3]=10  
T:=Tuple[1,3]  
Val_mean:=mean(T)